package LearnDataStructure.b_散列结构;

import LearnDataStructure.b_散列结构.HashSet.MyHashSet;

import java.util.Iterator;

/**
 * @version: 1.0
 * @Author: wuqiu
 * @date: 2023-07-05 14:24
 * @description: LeetcodeLearnAlgorithm -> LearnDataStructure.b_散列结构
 */
public interface MyHash<K, V> {
    /**
     * 添加元素
     *
     * @param key
     * @param value
     * @return
     */
    void put(K key, V value);

    /**
     * 添加大量元素
     * 根据已有map的键值对添加元素
     * @param map
     */
    void putAll(MyHash<? extends K, ? extends V> map);

    /**
     * 判断指定key是否存在
     * @return
     */
    boolean containsKey(K key);

    /**
     * 判断指定value是否存在
     * @return
     */
    boolean containsValue(V value);

    /**
     * 返回指定key的value
     * @param key
     * @return
     */
    V get(K key);

    /**
     * 返回所有key组成的数组
     * @return
     */
    MyHashSet<K> keySet();

    /**
     * 返回所有value组成的数组
     * @return
     */
    MyHashSet<V> values();

    /**
     * 获得迭代器
     * @return
     */
    Iterator<useNode<K, V>> iterator();

    /**
     * 删除指定key的元素
     * @param key
     * @return
     */
    V remove(K key);

    /**
     * 返回map的当前元素个数
     * @return
     */
    int size();

    /**
     * 判断map是否为空
     * @return
     */
    boolean isEmpty();

    /**
     * 清空map
     */
    void clear();
}
